package armazenamento;

import java.util.ArrayList;
import java.util.List;

import modelo.Anuncio;
import modelo.Usuario;

public class DbCRUD {
	private static DbCRUD cadastros;
	private List<Usuario> usuarios = new ArrayList<Usuario>();

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public static DbCRUD getInstancia() {
		if (cadastros == null) {
			return new DbCRUD();
		} else {
			return cadastros;
		}
	}

	public Usuario getUsuario(String login) {
		for (Usuario usuario : usuarios) {
			if (usuario.getLogin().equals(login))
				return usuario;
		}
		return null;
	}

	public boolean cadastrarUsuario(Usuario usuario) {
		if (this.getUsuario(usuario.getLogin()) == null) {
			this.usuarios.add(usuario);
			return true;
		} else
			return false;
	}

	public boolean excluirAnuncio(Anuncio anuncio) {
		List<Anuncio> anuncios = anuncio.getUsuario().getAnuncios();

		for (int i = 0; i < anuncios.size(); i++) {
			Anuncio an = anuncios.get(i);
			if (an.equals(anuncio)) {
				anuncios.remove(i);
				return true;
			}
		}
		return false;
	}

	public boolean alterarAnuncio(Anuncio anuncio, Anuncio anuncioAlterado) {
		List<Anuncio> anuncios = anuncio.getUsuario().getAnuncios();

		for (int i = 0; i < anuncios.size(); i++) {
			Anuncio an = anuncios.get(i);
			if (an.equals(anuncio)) {
				an.setResumo(anuncioAlterado.getResumo());
				an.setDetalhes(anuncioAlterado.getDetalhes());
				return true;
			}
		}
		return false;
	}

	public boolean cadastrarAnuncio(Anuncio anuncio) {
		Usuario usuario = anuncio.getUsuario();
		List<Anuncio> anuncios;
		for (Usuario usu : usuarios) {
			if (usu.equals(usuario)) {
				anuncios = usu.getAnuncios();
				for (Anuncio an : anuncios) {
					if (an.equals(anuncio)) return false;
					
				}
				usu.getAnuncios().add(anuncio);
				return true;
			}

		}
		return false;
	}
	
	public List<Anuncio> listarAnuncios(){
		
		List<Usuario> usuarios=this.getUsuarios();
		List<Anuncio> todosAnuncios=new ArrayList<Anuncio>();
		
		for (Usuario usuario : usuarios) {
			List<Anuncio> anuncios= usuario.getAnuncios();
			for (int i = 0; i < anuncios.size(); i++) {
				todosAnuncios.add(anuncios.get(i));
			}
		}
		return todosAnuncios;
	}
}
